package cn.cdeden.resource.api.domain;

import cn.cdeden.common.core.utils.StringUtils;
import cn.cdeden.common.oss.enumd.OssModuleOperate;
import com.alibaba.fastjson2.JSONObject;
import io.github.linpeilie.annotations.AutoMapper;
import io.github.linpeilie.annotations.AutoMappers;
import io.swagger.v3.oas.annotations.Parameter;
import jakarta.validation.constraints.NotNull;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.io.File;
import java.io.Serializable;


/**
 * @author Yu.
 * @Description // 文件上传接收类
 * @Date 2024/12/4 16:01
 * @return
 **/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
//@AutoMappers({@AutoMapper(target = FilesTreeUploadDto.class)})
public class RemoteFilesUpload implements Serializable {

    private static final long serialVersionUID = 1L;


    @Parameter(name = "模块的编号")
    private String moduleId;

    /**
     * 文件实例的编号
     **/
    @Parameter(name = "文件实例的编号")
    private String storageId;

    /**
     * 文件版本号
     **/
    @Parameter(name = "文件版本号")
    private String versionId;

    /**
     * 文件版本名称
     */
    @Parameter(name = "文件版本名称")
    private String versionName;


    /**
     * 文件上传的路径
     **/
    @Parameter(name = "文件上传的路径")
    private String filePath;

    public void setPath(String path) {
        boolean notBlank = StringUtils.isNotBlank(path);
        if (StringUtils.isNotBlank(this.filePath) && notBlank) {
            this.filePath = this.filePath + "/" + path;
        } else if (notBlank) {
            this.filePath = path;
        }

    }


    /**
     * 父编号
     **/
    @Parameter(name = "父编号")
    private String parentId;

    /**
     * 文件大小
     **/
    @Parameter(name = "文件大小")
    private Long fileSize;

    /**
     * 文件后缀名
     */
    @Parameter(name = "文件后缀名")
    private String fileSuffix;


    /**
     * 文件名称
     **/
    @Parameter(name = "文件名称")
    private String fileName;

    /**
     * 文件路径
     **/
    private String url;

    /**
     * 备注
     **/
    @Parameter(name = "备注")
    private String remarks;

    /**
     * 其他信息  存放个个模块的 要携带的其他参数
     **/
    @Parameter(name = "其他信息  存放个个模块的 要携带的其他参数")
    private JSONObject info;

    /**
     * 模块
     **/
    @NotNull(message = "缺少必要上传文件参数")
    private String type;

    private byte[] data;

    private OssModuleOperate operate = OssModuleOperate.upload;


    public void setJsonInfo(JSONObject info) {
        this.info = info;
    }

    public void setInfo(String info) {
        this.info = JSONObject.parseObject(info);
    }


}
